// Copyright 2011 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the 'License');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

traceur.define('codegeneration', function() {
  'use strict';

  var IdentifierExpression = traceur.syntax.trees.IdentifierExpression;
  var PropertyNameAssignment = traceur.syntax.trees.PropertyNameAssignment;
  var ParseTreeTransformer = traceur.codegeneration.ParseTreeTransformer;

  /**
   * Desugars property name shorthands
   *
   * @see <a href="http://wiki.ecmascript.org/doku.php?id=strawman:object_initialiser_shorthand">strawman:object_initialiser_shorthand</a>
   *
   * @extends {ParseTreeTransformer}
   * @constructor
   */
  function PropertyNameShorthandTransformer() {}

  PropertyNameShorthandTransformer.transformTree = function(tree) {
    return new PropertyNameShorthandTransformer().transformAny(tree);
  };

  PropertyNameShorthandTransformer.prototype = traceur.createObject(
      ParseTreeTransformer.prototype, {

    transformPropertyNameShorthand: function(tree) {
      // We need to pass along the location for the FreeVariableChecker to not
      // fail.
      return new PropertyNameAssignment(tree.location,
          tree.name, new IdentifierExpression(tree.location, tree.name));
    }
  });

  return {
    PropertyNameShorthandTransformer: PropertyNameShorthandTransformer
  };
});
